#include "texture.h"

//--------------------- Constructeurs et destructeur -------------------

/****************************************************************************************
 * Constructeur par défault                                                             *
 * @param nomTexture: le nom de la texture à charger dans nos ressources                *
 ****************************************************************************************/
Texture::Texture(QString nomTexture)
{
    _id = 0;
    _nom = nomTexture;
    initialiser(nomTexture);
}

/****************************************************************************************
 * Destructeur                                                                          *
 ****************************************************************************************/
Texture::~Texture()
{
    glDeleteTextures(1, &_id);
}

//----------------------------------------------------------------------
//--------------------- Méthodes ---------------------------------------

/****************************************************************************************
 * On utilise la texture, si celle-ci n'est pas initialisée, on l'initialise            *                                                                        *
 ****************************************************************************************/
void Texture::utiliser()
{
    if(_id != 0)
    {
        glEnable(GL_TEXTURE_2D);
        glBindTexture( GL_TEXTURE_2D, _id );
    }
}
/****************************************************************************************
 * On initialise la texture à partir de l'image du chemin                               *
 ****************************************************************************************/
void Texture::initialiser(QString nomTexture)
{
    QString mw_cheminExecutable = QCoreApplication::applicationDirPath();
    QString cheminTexture = mw_cheminExecutable + "/ressources/images/" + nomTexture ;

    QImage qim_Texture;
    QImage qim_TempTexture;

    qim_TempTexture.load(cheminTexture);

    if(!qim_TempTexture.isNull())
    {
        qim_Texture = QGLWidget::convertToGLFormat( qim_TempTexture );
        _hauteur = qim_Texture.height();
        _longueur = qim_Texture.width();

        glGenTextures( 1, &_id );
        glBindTexture( GL_TEXTURE_2D, _id );
        glTexImage2D( GL_TEXTURE_2D, 0, 3, qim_Texture.width(), qim_Texture.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, qim_Texture.bits() );
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    }
}

//----------------------------------------------------------------------
//--------------------- Accesseurs -------------------------------------

/****************************************************************************************
 * Accesseur sur la longueur                                                             *
 * @return GLfloat : la longueur de la texture                                           *
 ****************************************************************************************/
GLfloat Texture::getLongueur()
{
    return _longueur;
}

/****************************************************************************************
 * Accesseur sur la hauteur                                                             *
 * @return GLfloat : la hauteur de la texture                                           *
 ****************************************************************************************/
GLfloat Texture::getHauteur()
{
    return _hauteur;
}

/****************************************************************************************
 * Accesseur sur le nom de la texture                                                   *
 * @return QString : le nom de la texture
 ****************************************************************************************/
QString Texture::getNomTexture()
{
    return _nom;
}

/****************************************************************************************
 * Accesseur sur le nom de la texture                                                   *
 * @return Gluint : le nom de la texture
 ****************************************************************************************/
GLuint Texture::getId()
{
    return _id;
}
